home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / powerd / source / lib / powerd_lib.lha / PowerD_PPC / RealStr.ass < prev    next >
Text File  |  2002-03-17  |  4KB  |  224 lines

  1.     .text
  2.     .sdreg    r2
  3.     .align    2
  4.     .global    _RealStr
  5. _RealStr:
  6. ###############################################################################
  7. # name           offset
  8. # __local        0
  9. # buf            4
  10. # neg            28
  11. # rest           32
  12. # top            36
  13. # d              40
  14. # args ###########################
  15. # str            48
  16. # f              52
  17. # n              60
  18.     mflr    r0
  19.     stw    r0,8(r1)
  20.     stwu    r1,-92(r1)
  21.     stw    r13,24(r1)
  22.     mr    r13,r1
  23.     stw    r3,48+28(r13)
  24.     stfd    f1,52+28(r13)
  25.     stw    r4,60+28(r13)
  26.     lwz    r0,RealStr_laddr(r2)
  27.     stw    r0,0+28(r13)
  28. #     DEFL    top,rest,neg=FALSE
  29.     li    r3,0
  30.     stw    r3,28+28(r13)
  31. #     IF f<0 THEN neg:=TRUE
  32. if0:
  33.     lfd    f1,52+28(r13)
  34.     lfd    f2,n0(r2)
  35.     fcmpo    0,f1,f2
  36.     blt    $+12
  37.     li    r3,0
  38.     b    $+8
  39.     li    r3,-1
  40.     mr.    r3,r3
  41.     beq    end0
  42. #     IF f<0 THEN neg:=TRUE
  43.     li    r3,-1
  44.     stw    r3,28+28(r13)
  45. end0:
  46. #     d:=FAbs(f)
  47.     lfd    f1,52+28(r13)
  48.     fabs    f1,f1    # FAbs
  49.     stfd    f1,40+28(r13)
  50. #     top:=d
  51.     lfd    f0,40+28(r13)
  52.     fctiw    f0,f0
  53.     stfd    f0,-8(r1)
  54.     lwz    r3,-4(r1)
  55.     stw    r3,36+28(r13)
  56. #     d-=top
  57.     lfd    f1,40+28(r13)
  58.     lwz    r3,36+28(r13)
  59.     lis    r0,17200
  60.     stw    r0,-8(r1)
  61.     xoris    r0,r3,0x8000
  62.     stw    r0,-4(r1)
  63.     lfd    f0,-8(r1)
  64.     lfd    f2,conv(r2)
  65.     fsub    f2,f0,f2
  66.     fsub    f1,f1,f2
  67.     stfd    f1,40+28(r13)
  68. #         top--
  69. if2:
  70.     lfd    f1,40+28(r13)
  71.     lfd    f2,n1(r2)
  72.     fcmpo    0,f1,f2
  73.     blt    $+12
  74.     li    r3,0
  75.     b    $+8
  76.     li    r3,-1
  77.     mr.    r3,r3
  78.     beq    end2
  79. #         top--
  80.     lwz    r3,36+28(r13)
  81.     subi    r3,r3,1
  82.     stw    r3,36+28(r13)
  83. #         d++
  84.     lfd    f1,40+28(r13)
  85.     lfd    f2,n2(r2)
  86.     fadd    f1,f1,f2
  87.     stfd    f1,40+28(r13)
  88. end2:
  89. #     d*=1000000000
  90.     lfd    f1,40+28(r13)
  91.     lfd    f2,n3(r2)
  92.     fmul    f1,f1,f2
  93.     stfd    f1,40+28(r13)
  94. #     rest:=d
  95.     lfd    f0,40+28(r13)
  96.     fctiw    f0,f0
  97.     stfd    f0,-8(r1)
  98.     lwz    r3,-4(r1)
  99.     stw    r3,32+28(r13)
  100. #     IF f<0 THEN top:=-top
  101. if4:
  102.     lfd    f1,52+28(r13)
  103.     lfd    f2,n4(r2)
  104.     fcmpo    0,f1,f2
  105.     blt    $+12
  106.     li    r3,0
  107.     b    $+8
  108.     li    r3,-1
  109.     mr.    r3,r3
  110.     beq    end4
  111. #     IF f<0 THEN top:=-top
  112.     lwz    r3,36+28(r13)
  113.     neg    r3,r3
  114.     stw    r3,36+28(r13)
  115. end4:
  116. #     StringF(buf,'\s\d.\z\r\d[9]',IF neg THEN '-' ELSE NIL,Abs(top),rest)
  117.     subi    r1,r1,12
  118.     addi    r3,r13,4+28
  119.     stw    r3,0+24(r1)
  120.     lwz    r3,@_str0(r2)
  121.     stw    r3,4+24(r1)
  122.     subi    r1,r1,12
  123. if6:
  124.     lwz    r0,28+28(r13)
  125.     mr.    r0,r0
  126.     beq    elseif6_1
  127.     lwz    r3,@_str1(r2)
  128.     stw    r3,0+24(r1)
  129.     b    end6
  130. elseif6_1:
  131.     li    r3,0
  132.     stw    r3,0+24(r1)
  133. end6:
  134.     lwz    r3,36+28(r13)
  135.     bl    _Abs    # Abs
  136.     stw    r3,4+24(r1)
  137.     lwz    r3,32+28(r13)
  138.     stw    r3,8+24(r1)
  139.     lwz    r3,0+28(r13)
  140.     addi    r3,r3,0
  141.     lwz    r4,0+24(r1)
  142.     stw    r4,0(r3)
  143.     lwz    r4,4+24(r1)
  144.     stw    r4,4(r3)
  145.     lwz    r4,8+24(r1)
  146.     stw    r4,8(r3)
  147.     addi    r1,r1,12
  148.     stw    r3,8+24(r1)
  149.     lwz    r3,24(r1)
  150.     addi    r1,r1,4
  151.     lwz    r4,24(r1)
  152.     addi    r1,r1,4
  153.     lwz    r5,24(r1)
  154.     addi    r1,r1,4
  155.     bl    _StringF    # StringF
  156. #     StrCopy(str,buf,StrLen(buf)-9+n)
  157.     lwz    r3,48+28(r13)
  158.     addi    r4,r13,4+28
  159.     stw    r4,20(r1)
  160.     stw    r3,16(r1)
  161.     subi    r1,r1,8
  162.     addi    r3,r13,4+28
  163.     bl    _StrLen    # StrLen
  164.     mr    r5,r3
  165.     lwz    r3,24(r1)
  166.     lwz    r4,28(r1)
  167.     addi    r1,r1,8
  168.     subi    r5,r5,9
  169.     lwz    r6,60+28(r13)
  170.     add    r5,r5,r6
  171.     bl    _StrCopy    # StrCopy
  172. RealStrend:
  173.     lwz    r3,48+28(r13)
  174. RealStrfinish:
  175.     lwz    r13,24(r1)
  176.     addi    r1,r1,92
  177.     lwz    r0,8(r1)
  178.     mtlr    r0
  179.     blr
  180.  
  181.     .global    _RealStr
  182.     .type    _RealStr,2
  183.     .size    _RealStr,$-_RealStr
  184. RealStr_local:
  185. RealStr_list0:
  186.     .ualong    0
  187.     .ualong    0
  188.     .ualong    0
  189.     .align    2
  190.     .global    _StrCopy
  191.     .global    _StringF
  192.     .global    _StrLen
  193.     .global    _Abs
  194.     .global    _FAbs
  195.     .tocd
  196.     .global    RealStr_laddr
  197. RealStr_laddr:    .long    RealStr_local
  198.     .extern    _stdrast_coloura
  199.     .extern    _stdrast
  200.     .extern    _exceptioninfo
  201.     .extern    _exception
  202.     .extern    _wbmessage
  203.     .extern    _PowerPCBase
  204.     .extern    _stdin
  205.     .extern    _stdout
  206.     .extern    _arg
  207.     .extern    _GfxBase
  208.     .extern    _IntuitionBase
  209.     .extern    _DOSBase
  210.     .extern    _ExecBase
  211.     .data
  212. n0:    .long    0x0       ,0x0       
  213.     .set    n1,n0
  214. n2:    .long    0x3FF00000,0x0       
  215. n3:    .long    0x41CDCD65,0x0       
  216.     .set    n4,n1
  217. conv:    .long    0x43300000,0x80000000
  218.     .extern    @_str0
  219.     .global    str0
  220. str0:    .byte    "%s%ld.%09.9ld",0
  221.     .extern    @_str1
  222.     .global    str1
  223. str1:    .byte    "-",0
  224.